import { createRouter, createWebHashHistory } from 'vue-router'
import AuthLogin from '@/views/AuthLogin.vue'
import SysLayout from '@/components/SysLayout.vue'
import DefaultHome from '@/views/DefaultHome.vue'
import PersonalManage from '@/views/PersonalManage.vue'

import NProgress from 'nprogress';
import 'nprogress/nprogress.css'

const router = createRouter({
  history: createWebHashHistory(),
  routes: [
    {
      path: '/',
      name: 'AuthLogin',
      component: AuthLogin,
      meta: {
        // 页面标题title
        title: '登录页'
      }
    },
    {
      path: '/layout',
      name: 'SysLayout',
      component: SysLayout,
      children: [
        {
          path:'lifecycle',
          name:'LifeCycle',
          component: () => import('@/views/LifeCycle.vue'),
          meta: {
            title: 'lifecycle',
            index:"1-1"
          }
        },
        {
          path:'test3D',
          name:'Test3D',
          component: () => import('@/views/Test3D.vue'),
          meta: {
            title: 'test3D',
            index:"1-2"
          }
        },
        {
          path:'echarts',
          name:'Echarts',
          component: () => import('@/views/Echarts.vue'),
          meta: {
            title: 'echarts',
            index:"1-3"
          }
        },
        {
          path: 'home',
          name: 'DefaultHome',
          component: DefaultHome,
          meta: {
            title: '主页',
            index:"2"
          }
        },
        {
          path: 'personal',
          name: 'PersonalManage',
          component: PersonalManage,
          meta: {
            title: '个人资料',
            index:"3"
          }
        },
        {
          path:'about',
          name:'About',
          component: () => import('@/views/About.vue'),
          meta: {
            title: '关于',
            index:"4"
          }
        },
        {
          path:'testRegion',
          name:'TestRegion',
          component: () => import('@/views/TestRegion.vue'),
          meta: {
            title: '行政区划',
            index:"6"
          }
        }
      ]
    }

  ]
})

//全局前置守卫
router.beforeEach((to, from, next) => {
  // console.log('即将要进入的目标 路由对象')
  // console.log(to);
  // console.log('当前导航正要离开的路由')
  // console.log(from);
  /* 路由发生变化修改页面title */
  if (to.meta.title) {
      document.title = 'OpporAdmin' +' | '+  to.meta.title;
  }else {
      document.title = 'OpporAdmin';
  }

  if (to.path === '/') {
      //任何情况均可访问login页面
      NProgress.start();
      next();
  } else {
      NProgress.start();
      next();

      // let loginInfoStr = sessionStorage.getItem('loginInfo');
      // if (loginInfoStr !== undefined && loginInfoStr !== null) {
      //     let token = JSON.parse(loginInfoStr).token;
      //     if (token !== undefined && token !== null) {
      //         //有token表示已登录，可以进主页
      //         if (to.name === 'defaultHome') {
      //             NProgress.start();

      //             next();
      //         } else {
      //             //其他路由若没有后端权限，则返回登录页面
      //             console.log(to.name);
      //             let permDataStr = sessionStorage.getItem('permData');
      //             if (permDataStr === undefined || permDataStr === null) {
      //                 next({path: '/'});
      //                 sessionStorage.clear();
      //             } else {
      //                 let permData = JSON.parse(permDataStr);
      //                 console.log(permData);
      //                 if (permData.menuEntitySet === undefined || permData.menuEntitySet === null || permData.menuEntitySet.length === 0) {
      //                     next({path: '/'});
      //                     sessionStorage.clear();
      //                 } else {
      //                     //findOne
      //                     const firstRouter = permData.menuEntitySet.find(e => e.routerName === to.name);
      //                     console.log(firstRouter);
      //                     if (firstRouter !== undefined && firstRouter !== null) {
      //                         NProgress.start();

      //                         next();
      //                     } else {
      //                         next('/');


      //                     }
      //                 }
      //             }
      //         }


      //     } else {
      //         //回去login页
      //         next({path: '/'});
      //     }
      // } else {
      //     //回去login页
      //     next({path: '/'});
      // }
  }


  //next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。
  //
  // next(): 进行管道中的下一个钩子。如果全部钩子执行完了，则导航的状态就是 confirmed (确认的)。
  //
  // next(false): 中断当前的导航。如果浏览器的 URL 改变了 (可能是用户手动或者浏览器后退按钮)，那么 URL 地址会重置到 from 路由对应的地址。
  //
  // next('/') 或者 next({ path: '/' }): 跳转到一个不同的地址。当前的导航被中断，然后进行一个新的导航。你可以向 next 传递任意位置对象，且允许设置诸如 replace: true、name: 'home' 之类的选项以及任何用在 router-link 的 to prop 或 router.push 中的选项。
  //
  // next(error): (2.4.0+) 如果传入 next 的参数是一个 Error 实例，则导航会被终止且该错误会被传递给 router.onError() 注册过的回调

});

//全局后置钩子
//全局后置钩子，然而和守卫不同的是，这些钩子不会接受 next 函数也不会改变导航本身：
router.afterEach((to, from) => {
  console.log('=============================')
  console.log('即将要进入的目标 路由对象')
  console.log(to);
  console.log('当前导航正要离开的路由')
  console.log(from);
  NProgress.done();
});


export default router
